package com.huilian.iotbox.admin.service.impl;

import com.huilian.iotbox.admin.dao.StatsAppDeviceDao;
import com.huilian.iotbox.admin.service.StatsAppDeviceService;
import com.huilian.iotbox.data.dto.StatsAppDeviceDto;
import com.huilian.iotbox.data.enums.StatisticsTypeEnum;
import com.huilian.iotbox.data.service.ErrorLogCommonService;
import com.huilian.iotbox.data.vo.StatsAppDeviceVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.ObjectUtils;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author LinYinDong
 * @date 2023/9/2 14:52
 */
@Slf4j
@Service
public class StatsAppDeviceServiceImpl implements StatsAppDeviceService {
    @Resource
    private StatsAppDeviceDao statsAppDeviceDao;
    @Autowired
    private ErrorLogCommonService errorLogCommonService;
    @Override
    public Exception statsDayAppDeviceJob(String startTime, String endTime, String yesterday, Integer type) {
        Exception temp = null;
        try {
            //统计吧台现金收款
            List<StatsAppDeviceVo> statsAppDeviceVos = statsAppDeviceDao.statsDayOrderByTerminalTypeList(startTime, endTime);
            if(!ObjectUtils.isEmpty(statsAppDeviceVos)){
                statsAppDeviceVos.forEach(item ->{
                    StatsAppDeviceDto statsAppDeviceDto = new StatsAppDeviceDto();
                    statsAppDeviceDto.setType(type);
                    statsAppDeviceDto.setSn(item.getSn());
                    statsAppDeviceDto.setDateStr(yesterday);
                    statsAppDeviceDto.setUserId(item.getUserId());
                    statsAppDeviceDto.setMchStoreId(item.getMchStoreId());
                    statsAppDeviceDto.setManualTerminalCash(item.getManualTerminalCash());
                    statsAppDeviceDao.insert(statsAppDeviceDto);
                });
            }
        }catch (Exception e) {
            e.printStackTrace();
            temp = e;
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

            StatsAppDeviceDto statsAppDeviceDto = new StatsAppDeviceDto();
            statsAppDeviceDto.setStartTime(startTime);
            statsAppDeviceDto.setEndTime(endTime);
            errorLogCommonService.writerInfoException("吧台现金日统计失败", statsAppDeviceDto, e);
        }
        return temp;
    }

    @Override
    public Exception statsMonthAppDeviceJob(String startTime, String endTime, String previousMonth,Integer type) {
        Exception temp = null;
        try {
            //统计吧台现金收款
            StatsAppDeviceDto statsAppDeviceDto1 = new StatsAppDeviceDto();
            statsAppDeviceDto1.setType(StatisticsTypeEnum.DAY.getCode());
            statsAppDeviceDto1.setStartTime(startTime);
            statsAppDeviceDto1.setEndTime(endTime);
            List<StatsAppDeviceVo> statsAppDeviceVos = statsAppDeviceDao.statsMonthAppDeviceList(statsAppDeviceDto1);
            if(!ObjectUtils.isEmpty(statsAppDeviceVos)){
                statsAppDeviceVos.forEach(item ->{
                    StatsAppDeviceDto statsAppDeviceDto = new StatsAppDeviceDto();
                    statsAppDeviceDto.setType(type);
                    statsAppDeviceDto.setSn(item.getSn());
                    statsAppDeviceDto.setDateStr(previousMonth);
                    statsAppDeviceDto.setUserId(item.getUserId());
                    statsAppDeviceDto.setMchStoreId(item.getMchStoreId());
                    statsAppDeviceDto.setManualTerminalCash(item.getManualTerminalCash());
                    statsAppDeviceDao.insert(statsAppDeviceDto);
                });
            }
        }catch (Exception e) {
            e.printStackTrace();
            temp = e;
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

            StatsAppDeviceDto statsAppDeviceDto = new StatsAppDeviceDto();
            statsAppDeviceDto.setStartTime(startTime);
            statsAppDeviceDto.setEndTime(endTime);
            errorLogCommonService.writerInfoException("吧台现金月统计失败", statsAppDeviceDto, e);
        }
        return temp;
    }
}
